// 游戏功能实现（包含屏幕控制、消息记录和输入验证）|| Game functions implementation (screen control, message logging, input validation)
#include "Game.hh"        // 游戏主蓝图 || Game main blueprint
#include <sstream>        // 字符串处理工具（类似文字转换器）|| String processing tool (like text converter)

// ====== 跨平台清屏方案 ====== || ====== Cross-platform Screen Clearing ======
// 根据操作系统选择不同清屏指令 || Choose clear command based on operating system
#ifdef _WIN32             // 如果是Windows系统 || If Windows system
#include <windows.h>      // 包含Windows系统工具 || Include Windows system tools
#else                     // 其他操作系统（如Linux/MacOS）|| Other OS (e.g. Linux/MacOS)
#include <unistd.h>       // 包含Unix系统工具 || Include Unix system tools
#endif

// 清空游戏屏幕（类似擦黑板功能）|| Clear game screen (like wiping a blackboard)
void Game::clearScreen() {
#ifdef _WIN32
    system("cls");        // Windows系统使用"cls"命令 || Windows uses "cls" command
#else
    system("clear");      // 其他系统使用"clear"命令 || Other systems use "clear" command
#endif
}

// ====== 消息记录系统 ====== || ====== Message Logging System ======
// 添加新消息到滚动日志（类似手机短信收件箱）|| Add new message to scrolling log (like SMS inbox)
void Game::addMessage(const std::string& msg) {
    messageLog.push_back(msg);  // 将消息放入列表末尾 || Put message at list end
    
    // 保持最多显示5条最新消息（类似自动删除旧短信）|| Keep maximum 5 recent messages (auto-delete old ones)
    if (messageLog.size() > 5) {
        messageLog.erase(messageLog.begin());  // 删除最旧的消息 || Remove oldest message
    }
}

// ====== 输入验证系统 ====== || ====== Input Validation System ======
// 验证玩家输入是否为有效选项（类似智能门禁检查）|| Validate if player input is valid option (like smart access control)
bool Game::validateInput(const std::string& input, int& choice, int maxChoice) {
    std::stringstream ss(input);  // 创建文字转换器（把输入文字转为数字）|| Create text converter (transform input to number)
    
    // 尝试转换输入内容为数字 || Try converting input to number
    if (ss >> choice) {          // 如果转换成功 || If conversion succeeds
        std::string remaining;   // 检查是否有剩余字符（防止"3abc"这种输入）|| Check for leftover characters (prevent inputs like "3abc")
        if (ss >> remaining) 
            return false;        // 发现多余字符视为无效输入 || Extra characters mean invalid input
        
        // 检查数字是否在允许范围内（0到最大选项号）|| Check if number is within valid range (0 to max option)
        if (choice >= 0 && choice <= maxChoice) 
            return true;         // 有效选择 || Valid selection
    }
    return false;  // 所有其他情况均为无效输入 || All other cases are invalid
}